import base64
import pickle

from django_redis import get_redis_connection


def merge_cart_cookie_to_redis(request, user, response):
    # 获取cookie中的购物车数据
    cookies_cart = request.COOKIES.get('carts')

    # cookie中没有数据就响应结果
    if not cookies_cart:
        return response

    # cookie中有数据
    cart_dict = pickle.loads(base64.b64decode(cookies_cart.encode()))

    # 哈希字典
    new_dict = {}
    # 选中状态 选中
    new_add = []
    # 选中状态 未选中
    new_remove = []

    # 拆分数据
    for sku_id, item_dict in cart_dict.items():
        # 数量
        new_dict[sku_id] = item_dict['count']

        if item_dict['selected']:
            # 选中状态 选中
            new_add.append(sku_id)
        else:
            # 选中状态 未选中
            new_remove.append(sku_id)

    # 将new_cart_dict写入到Redis数据库
    redis_conn = get_redis_connection('carts')
    pl = redis_conn.pipeline()

    # 保存数量
    pl.hmset('carts_%s' % user.id, new_dict)
    # 保存选中状态 选中
    if new_add:
        pl.sadd('selected_%s' % user.id, *new_add)
    # 保存选中状态 未选中
    if new_remove:
        pl.srem('selected_%s' % user.id, *new_remove)

    pl.execute()

    # 清除cookie
    response.delete_cookie('carts')

    return response
